import getAlignOffset from './getAlignOffset';

/**
 * 该函数用于计算目标元素相对于参考节点定位后的精确位置。通过指定两个对齐点（参考点和对齐点），结合偏移值，计算出需要调整的位移量。
 * @param  elRegion: 目标元素的区域信息对象，包含：{left：当前左坐标,top：当前顶坐标,width：宽度,height：高度}
 * @param  refNodeRegion: 参考节点（基准元素）的区域信息对象（格式同elRegion）
 * @param  points: 对齐点配置数组，格式为：[targetPoint, refPoint]
 *                  targetPoint：目标元素上的对齐点（如 'tl'/'cc'）
 *                  refPoint：参考节点上的对齐点（如 'tr'/'bc'） 
 * @param  offset: 额外偏移量数组：[offsetX, offsetY]（正值为右下方向）
 * @param  targetOffset: 目标元素偏移调整数组：[offsetX, offsetY]（正值为左上方向）
 * @return {[type]}
 */
function getElFuturePos(elRegion, refNodeRegion, points, offset, targetOffset) {
  // 计算参考节点上的对齐点（由points[1]指定）在页面中的坐标，记为p1。
  const p1 = getAlignOffset(refNodeRegion, points[1]);
  // 计算目标元素上的对齐点（由points[0]指定）在页面中的坐标，记为p2。
  const p2 = getAlignOffset(elRegion, points[0]);
  // 计算两个对齐点之间的差值：diff = [p2.left - p1.left, p2.top - p1.top]。
  // 这个差值表示：如果直接把目标元素放在当前的位置（elRegion）上，那么它的对齐点（p2）与参考节点的对齐点（p1）之间的距离。
  const diff = [p2.left - p1.left, p2.top - p1.top];

  // 调整目标元素的位置：
  // 将目标元素的位置向左移动diff[0]（即水平方向上的差值）并向上移动diff[1]（垂直方向上的差值），这样两个对齐点就会重合。然后再加上offset的偏移，减去targetOffset的偏移。
  //    新的left = elRegion.left - diff[0] + offset[0] - targetOffset[0]
  //    新的top = elRegion.top - diff[1] + offset[1] - targetOffset[1]
  return {
    left: Math.round(elRegion.left - diff[0] + offset[0] - targetOffset[0]),
    top: Math.round(elRegion.top - diff[1] + offset[1] - targetOffset[1]),
  };
}

export default getElFuturePos;
